using System;

namespace JGSY.CMS.LowCode.Platform.Application.DTOs
{
    /// <summary>
    /// 审计日志数据传输对象
    /// 用于传输系统操作审计日志的详细信息和追踪数据
    /// </summary>
    public class AuditLogDto
    {
        /// <summary>
        /// 审计日志标识符
        /// </summary>
        public long Id { get; set; }
        
        /// <summary>
        /// 操作类型
        /// 如：创建、更新、删除、查询等操作类型
        /// </summary>
        public string Type { get; set; } = string.Empty;
        
        /// <summary>
        /// 操作内容
        /// 详细描述具体的操作内容和变更信息
        /// </summary>
        public string Content { get; set; } = string.Empty;
        
        /// <summary>
        /// 用户标识符
        /// 执行操作的用户ID
        /// </summary>
        public string UserId { get; set; } = string.Empty;
        
        /// <summary>
        /// 用户名称
        /// 执行操作的用户名
        /// </summary>
        public string UserName { get; set; } = string.Empty;
        
        /// <summary>
        /// 操作时间戳
        /// 操作发生的具体时间
        /// </summary>
        public DateTime Timestamp { get; set; }
        
        /// <summary>
        /// IP地址
        /// 执行操作时的客户端IP地址
        /// </summary>
        public string IP { get; set; } = string.Empty;
        
        /// <summary>
        /// 操作结果
        /// 操作的执行结果，如成功、失败等
        /// </summary>
        public string Result { get; set; } = string.Empty;
        
        /// <summary>
        /// 异常信息
        /// 操作过程中发生的异常详情
        /// </summary>
        public string Exception { get; set; } = string.Empty;
        
        /// <summary>
        /// 操作资源
        /// 被操作的资源名称或标识
        /// </summary>
        public string Resource { get; set; } = string.Empty;
        
        /// <summary>
        /// 租户标识符
        /// 多租户系统中的租户ID
        /// </summary>
        public string? TenantId { get; set; }
        
        /// <summary>
        /// 用户代理字符串
        /// 客户端浏览器或应用程序信息
        /// </summary>
        public string? UserAgent { get; set; }
        
        /// <summary>
        /// 操作耗时（毫秒）
        /// 请求处理所花费的时间
        /// </summary>
        public long? Duration { get; set; }
        
        /// <summary>
        /// 关联标识符
        /// 用于跟踪和关联相关操作的唯一标识符
        /// </summary>
        public string? CorrelationId { get; set; }
        
        /// <summary>
        /// HTTP方法
        /// GET、POST、PUT、DELETE等
        /// </summary>
        public string? HttpMethod { get; set; }
        
        /// <summary>
        /// 请求路径
        /// API端点或页面路径
        /// </summary>
        public string? RequestPath { get; set; }
        
        /// <summary>
        /// HTTP状态码
        /// 响应状态码，如200、404、500等
        /// </summary>
        public int? StatusCode { get; set; }
        
        /// <summary>
        /// 权限代码
        /// 执行操作所需的权限代码
        /// </summary>
        public string? PermissionCode { get; set; }
        
        /// <summary>
        /// 扩展数据
        /// JSON格式的额外数据信息
        /// </summary>
        public string? ExtendedData { get; set; }
    }
}
